package com.sendi.common.util;

import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.regex.Pattern;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;



public class Helper{
	/** Logger for this class and subclasses */
//    static protected final Log log = LogFactory.getLog(Helper.class);
//    
//    static public Properties props;
//    	
//    static public String urlEncode(String url,String code)
//    {
//    	try {
//			return URLEncoder.encode(url,code);
//		} catch (UnsupportedEncodingException e) {
//			e.printStackTrace();
//		}
//		return url;
//    }
//    	
//    public static String localnames(String localname_ID)
//	{
//		if(localname_ID.equals("huizhou"))
//			return "'huizhou','meizhou','shanwei'";
//		else if(localname_ID.equals("foshan"))
//			return "'foshan','shaoguan','qingyuan'";
//		else if(localname_ID.equals("guangzhou"))
//			return "'guangzhou','yangjiang','maoming'";
//		else if(localname_ID.equals("shantou"))
//			return "'shantou','jieyang','heyuan','chaozhou'";
//		else if(localname_ID.equals("zhongshan"))
//			return "'zhongshan','zhanjiang','yunfu'";
//		else
//			return "'"+localname_ID+"'";
//	}
//	
//    public static String localnames_gw(String localname_ID)
//	{
//		if(localname_ID.equals("guangzhou"))
//			return "'huizhou','yangjiang','zhuhai','guangzhou','qingyuan','meizhou','zhongshan','shanwei','maoming','yunfu','zhanjiang'";
//		else if(localname_ID.equals("shantou"))
//			return "'shantou','jieyang','heyuan','chaozhou'";
//		else if(localname_ID.equals("shenzhen"))
//			return "'shenzhen','dongguan','foshan','jiangmen','zhaoqing','shaoguan'";
//		else
//			return "'"+localname_ID+"'";
//	}
//    
//    public static ArrayList<String> PSTNcenter2Branches(String center)
//    {
//    	ArrayList<String> branchList = new ArrayList<String>();
//    	if(center.equals("����"))
//		{
//    		branchList.add("����");
//			branchList.add("��");
//			branchList.add("�麣");
//			branchList.add("����");
//			branchList.add("��Զ");
//			branchList.add("÷��");
//			branchList.add("��ɽ");
//			branchList.add("��β");
//			branchList.add("ï��");
//			branchList.add("�Ƹ�");
//			branchList.add("տ��");
//		}
//		else if(center.equals("��ͷ"))
//		{
//			branchList.add("��ͷ");
//			branchList.add("��Դ");
//			branchList.add("����");
//			branchList.add("����");
//		}
//		else if(center.equals("����"))
//		{
//			branchList.add("����");
//			branchList.add("��ݸ");
//			branchList.add("��ɽ");
//			branchList.add("����");
//			branchList.add("����");
//			branchList.add("�ع�");
//		}
//		else
//			log.info(center+" match nothing");
//    	return branchList;
//    }
//    
//    public static ArrayList<String> center2Branches(String center)
//    {
//    	ArrayList<String> branchList = new ArrayList<String>();
//    	if(center.equals("����"))
//		{
//			branchList.add("����");
//			branchList.add("ï��");
//			branchList.add("��");
//		}
//		else if(center.equals("��ɽ"))
//		{
//			branchList.add("��ɽ");
//			branchList.add("�ع�");
//			branchList.add("��Զ");
//		}
//		else if(center.equals("��ͷ"))
//		{
//			branchList.add("��ͷ");
//			branchList.add("��Դ");
//			branchList.add("����");
//			branchList.add("����");
//		}
//		else if(center.equals("��ɽ"))
//		{
//			branchList.add("��ɽ");
//			branchList.add("�Ƹ�");
//			branchList.add("տ��");
//		}
//		else if(center.equals("����"))
//		{
//			branchList.add("����");
//			branchList.add("��β");
//			branchList.add("÷��");
//		}
//		else if(center.equals("�麣"))
//			branchList.add("�麣");
//		else if(center.equals("����"))
//			branchList.add("����");
//		else if(center.equals("����"))
//			branchList.add("����");
//		else if(center.equals("��ݸ"))
//			branchList.add("��ݸ");
//		else if(center.equals("����"))
//			branchList.add("����");
//		else
//			log.info(center+" match nothing");
//    	return branchList;
//    }
//	static {
//		InputStream is = Helper.class.getResourceAsStream("/app.properties");
//	    props = new Properties();
//	    try{
//	    	if(is == null)
//	    		log.error("Can not load app.properties");
//	    	else	    	
//	    		props.load(is);    		
//	    }catch(Exception ex){
//	    	log.error("Error loading app.properties");
//	    }finally{
//	    	try{is.close();}catch(Exception e){}
//	    }
//	}
//	
//    
	static public String md5(String arg){
		String result = "-1";
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			md.update(arg.getBytes());
			result = new BigInteger(1, md.digest()).toString(16);
		} catch (NoSuchAlgorithmException e) {
//			log.error(e);
		}
		
		//Make sure it contains the leading-zero  -- to match the md5 of php
		if(result.length() < 32){
			for(int i=0; i< 32-result.length(); i++)
				result = "0" + result;
		}
			
		return result;
	}
	
	static public boolean isNum(String str){
		Pattern p = Pattern.compile("^\\d+$");
 		return p.matcher(str).matches();
	}
	
	static public String toGB(String str){
		try{
			return new String(str.getBytes("8859_1"),"GB2312");
		}catch(Exception e){
			return str;
		}
	}
	static public String codeFormatConvert(String srcFormat,String toFormat,String str){
		try{
			return new String(str.getBytes(srcFormat),toFormat);
		}catch(Exception e){
			return str;
		}
	}

	public static boolean isUTF8(String content)
	{
		byte[] temp;  
		String compstring;  
		try {
			temp = content.getBytes("UTF-8");
			compstring = new String(temp,"UTF-8");  
			if(content.equals(compstring))  
				return true;
			else
				return false;
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}  
		return false;
	}

	public static boolean isISO(String content)
	{
		byte[] temp;  
		String compstring;  
		try {
			temp = content.getBytes("ISO8859_1");
			compstring = new String(temp,"ISO8859_1");  
			if(content.equals(compstring))  
				return true;
			else
				return false;
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}  
		return false;
	}
	
	static public String toUTF8(String str){
		if(str == null)
			return null;
		try{
			 return new String(str.getBytes("8859_1"),"UTF8");
		}catch(Exception e){
			return str;
		}		
	}
	
	static public boolean isValidIp(String ip){
  		Pattern p = Pattern.compile("^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])[.](25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)[.](25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)[.](25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$");
  		return p.matcher(ip).matches();
  	}
  	
  	static public String getStandardSubnet(String currentIp){
  
  	if(!isValidIp(currentIp))
  		return currentIp;
  		
  	int ipval=Integer.parseInt(currentIp.substring(0,currentIp.indexOf('.')));
	if(ipval>=192)
		return currentIp.substring(0,currentIp.lastIndexOf("."))+".*";
	else if(ipval>=128)
		return currentIp.substring(0,currentIp.indexOf('.',currentIp.indexOf('.')+1))+".*.*";
	else 
		return currentIp.substring(0,currentIp.indexOf(".") )+".*.*.*";
    }
  	
  	public static String timeFormatConvert(String toFormat, java.util.Date date) {
		if(date == null)
			return "";
		SimpleDateFormat formatter = null;
		try {
			formatter = new SimpleDateFormat(toFormat);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return formatter.format(date);
	}
  	
  	/**
	 * transform one time format to another,such as "2006 Jan 19 20:03:18" to "20060119200318"
	 * 
	 * @param fromFormat1
	 * @param toFormat2
	 * @param time
	 * @return
	 */
	public static String timeFormatConvert(String fromFormat1, String toFormat2, String time) {
		String datestr = "";
		try {
			SimpleDateFormat sdf = new SimpleDateFormat(fromFormat1);
			java.util.Date date = sdf.parse(time);
			sdf = new SimpleDateFormat(toFormat2);
			datestr = sdf.format(date);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return datestr;
	}
	public static String sampleDateFormat(String dateStr){
		String str = dateStr;
		if(dateStr != null && dateStr.length() > 0){
			switch(dateStr.length()){
			case 8:
				str = dateStr.substring(0,4)+"-"+dateStr.substring(4,6)+"-"+dateStr.substring(6,8);
				break;
			case 10:
				str = dateStr.substring(0,4)+"-"+dateStr.substring(4,6)+"-"+dateStr.substring(6,8)+" "+dateStr.substring(8,10);
				break;
			case 12:
				str = dateStr.substring(0,4)+"-"+dateStr.substring(4,6)+"-"+dateStr.substring(6,8)+" "+dateStr.substring(8,10)+":"+dateStr.substring(10,12);
				break;
			case 14:
				str = dateStr.substring(0,4)+"-"+dateStr.substring(4,6)+"-"+dateStr.substring(6,8)+" "+dateStr.substring(8,10)+":"+dateStr.substring(10,12)+":"+dateStr.substring(12,14);
				break;
			}
		}
		return str;
	}
}
